package com.xzc.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.xzc.Constants;
import com.xzc.pojo.ZenTaoValues;
import com.xzc.pojo.response.AccountInfo;
import com.xzc.pojo.response.User;
import com.xzc.pojo.response.ZenTaoResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author 熊志聪
 * @Classname ReadValues
 * @Description 读取文本属性
 * @Date 2021/12/14 18:49
 */
@Slf4j
public class ReadValues {



    /**
     * account:xiongzhicong
     * password:bosssoft123
     * dept:
     *
     * @return
     */
    public static ZenTaoValues getZenTaoValues() {
        List<String> values = FileUtil.readLines(System.getProperty("user.dir")+Constants.FILE_PATH, "UTF-8");
        ZenTaoValues zenTaoValues = new ZenTaoValues();
        Integer year=null,month=null;
        for (String value : values) {
            if (value == null || StrUtil.EMPTY.equals(value)) {
                continue;
            }
            String[] nameAndValue = value.split(":");
            if (nameAndValue.length == 2) {
                if (Constants.ACCOUNT_NAME.equals(nameAndValue[0])) {
                    zenTaoValues.setAccount(nameAndValue[1]);
                } else if (Constants.PASSWORD_NAME.equals(nameAndValue[0])) {
                    zenTaoValues.setPassword(nameAndValue[1]);
                } else if (Constants.YEAR_NAME.equals(nameAndValue[0])) {
                    year= Integer.valueOf(nameAndValue[1]);
                }else if(Constants.MONTH_NAME.equals(nameAndValue[0])){
                    month=Integer.valueOf(nameAndValue[1]);
                    zenTaoValues.setMonth(month);
                }else if(Constants.FILE_NAME.equals(nameAndValue[0])){
                    zenTaoValues.setFileName(nameAndValue[1]);
                }else if(Constants.ONE_DEPT_NAME.equals(nameAndValue[0])){
                    zenTaoValues.setOneDeptName(nameAndValue[1]);
                }else if (Constants.BIG_DATA.equals(nameAndValue[0])){
                    zenTaoValues.setBigDataStaffList(Arrays.asList(nameAndValue[1].split(StrUtil.COMMA)));
                }else if(Constants.NO_STORY_PROJECT_CODE.equals(nameAndValue[0])){
                    zenTaoValues.setNoStoryProjectCode(nameAndValue[1]);
                }else if(Constants.TEST.equals(nameAndValue[0])){
                    zenTaoValues.setTest("1".equals(nameAndValue[1]));
                }
            }
        }
        zenTaoValues.setFileName(zenTaoValues.getFileName()+zenTaoValues.getMonth()+"月");
        setFileName(zenTaoValues);

        if(year!=null&&month!=null){
            getStartEnd(year,month,zenTaoValues);
        }
        if (allNotBlank(zenTaoValues)) {
            String zenTaoSuffix = ZenTaoUtils.getZenTaoSuffix();
            zenTaoValues.setZenTaoSuffix(zenTaoSuffix);
            //获取该用户所在的部门id
            if (ZenTaoUtils.zenTaoLogin(zenTaoValues.getAccount(), zenTaoValues.getPassword(), zenTaoSuffix)) {
                //user-view-[account].json user-task-[account]-[type]-[recTotal]-[recPerPage]-[pageID].json
                String getAccountUrl = Constants.URL_PREFIX + "my-profile.json?" + zenTaoSuffix;
                String accountInfo = HttpUtil.get(getAccountUrl);
                ZenTaoResponse zenTaoResponse = JsonUtils.jsonToBean(accountInfo, ZenTaoResponse.class);
                AccountInfo accountInfoVO = JsonUtils.jsonToBean(zenTaoResponse.getData(), AccountInfo.class);
                User user = accountInfoVO.getUser();
                if (user != null) {
                    //当前用户的上级部门
                    zenTaoValues.setDept(accountInfoVO.getParentDept());
                    return zenTaoValues;
                }
            }
        }
        throw new RuntimeException("请在zentao.txt文本中输入用户名称/密码/year/month!");
    }

    public static void getStartEnd(Integer year, Integer month, ZenTaoValues zenTaoValues) {
        Calendar cal = Calendar.getInstance();
        //设置年份
        cal.set(Calendar.YEAR,year);
        //设置月份(下一个月的第一天)
        cal.set(Calendar.MONTH, month);
        //获取某月最小天数
        int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
        //设置日历中月份的最小天数
        cal.set(Calendar.DAY_OF_MONTH, firstDay);
        //格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String end = sdf.format(cal.getTime());
        zenTaoValues.setEnd(end);

        cal.set(Calendar.YEAR,year);

        //设置月份(前一个月的最后一天)
        cal.set(Calendar.MONTH, month-2);
        //获取某月最小天数
        int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        //设置日历中月份的最小天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        String start = sdf.format(cal.getTime());
        zenTaoValues.setStart(start);
    }

    /**
     * 校验参数是否完整
     * @param zenTaoValues
     * @return
     */
    public static boolean allNotBlank(ZenTaoValues zenTaoValues){
        return StringUtils.isNotBlank(zenTaoValues.getAccount()) && StringUtils.isNotBlank(zenTaoValues.getPassword())
                && StringUtils.isNotBlank(zenTaoValues.getStart()) && StringUtils.isNotBlank(zenTaoValues.getEnd())
                &&StringUtils.isNotBlank(zenTaoValues.getFileName())&&StringUtils.isNotBlank(zenTaoValues.getOneDeptName())
                && CollUtil.isNotEmpty(zenTaoValues.getBigDataStaffList())&&(StringUtils.isNotBlank(zenTaoValues.getNoStoryProjectCode()))
                &&zenTaoValues.getTest()!=null;
    }
    public static void setFileName(ZenTaoValues zenTaoValues){
        String filePath = System.getProperty("user.dir")+"\\"+zenTaoValues.getFileName()+Constants.FILE_SUFFIX;
        String[] fileNameSpilt=filePath.split("\\.");
        String newFilePath=filePath;
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat(Constants.DATE_FORMAT);

        while (FileUtil.exist(newFilePath)){
            newFilePath=fileNameSpilt[0]+"("+simpleDateFormat.format(new Date())+")"+Constants.FILE_SUFFIX;
        }
        zenTaoValues.setFileName(newFilePath);
    }
    public static void main(String[] args) {
        ZenTaoValues zenTaoValues = ReadValues.getZenTaoValues();
        zenTaoValues.setFileName("博思数采政府采购工时统计12月份");
    }
}
